package zwyarraylist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import bean.UserBean;

/**
* contains机制讲解
* @ClassName: ArrayList04Test 
* @Description: TODO
* @author zhaoweiyong  yyd 
* @date 2017年7月4日 下午3:46:52 *
 */
public class ArrayList04Test {
	
	/**
	* contains详解
	* 调用的其实是indexOf方法
	* begin: 280行 
	* end:302行
	* @title: containsTest 
	* @Author: zhaoweiyong
	* @Date: 2017年7月4日下午3:48:53
	 */
	@Test
	public void containsTest(){
		
		List<String> dataList = new ArrayList<String>();
		dataList.add(null);
		dataList.add(null);
		//true
		//return indexOf(o) >= 0;
		Assert.assertEquals(true, dataList.contains(null));
		//找到第一个就结束
		Assert.assertEquals(0, dataList.indexOf(null));
		//-1
		Assert.assertEquals(-1, dataList.indexOf("唐代-王维"));
	}
	
	/**
	* 起始 ：311行
	* @title: lastIndexOfTest 
	* @Author: zhaoweiyong
	* @Date: 2017年7月4日下午3:58:30
	 */
	@Test
	public void lastIndexOfTest(){
		/* 
			public int lastIndexOf(Object o) {
				if (o == null) {
				    for (int i = size-1; i >= 0; i--)
				        if (elementData[i]==null)
				            return i;
				} else {
				    for (int i = size-1; i >= 0; i--)
				        if (o.equals(elementData[i]))
				            return i;
				}
				return -1;
			}
	    */
	}
	
	/**
	* 浅copy
	* @title: testClone 
	* @Author: zhaoweiyong
	* @Date: 2017年7月4日下午5:02:56
	 */
	@SuppressWarnings("unchecked")
	@Test
	public void testClone(){
		UserBean bean = new UserBean("王维",21);
		ArrayList<UserBean> userBeanList = new ArrayList<>();
		userBeanList.add(bean);
		
		ArrayList<UserBean> userBeanCloneList = (ArrayList<UserBean>) userBeanList.clone();
		
		System.out.println(userBeanCloneList.get(0) == userBeanList.get(0));
		bean.setName("嵊州");
		System.out.println(userBeanCloneList.get(0).getName());
		System.out.println(userBeanList.get(0).getName());
	}
	
	@Test
	public void testToArray(){
//		Arrays.copyOf(original, newLength)
//		Arrays.copyOf(elementData, size, a.getClass());
		UserBean bean = new UserBean("王维",21);
		ArrayList<UserBean> userBeanList = new ArrayList<>();
		userBeanList.add(bean);
		Object[] userBeanArr = userBeanList.toArray();
		UserBean vo = (UserBean) userBeanArr[0];
		System.out.println(vo.getName());
		vo.setName("李四");
		System.out.println(bean.getName());
	}
	
	/**
	* 随机访问O(1)
	* rangeCheck(index)
	* IndexOutOfBoundsException
	* @title: testGet 
	* @Author: zhaoweiyong
	* @Date: 2017年7月4日下午5:13:09
	 */
	@Test
	public void testGet(){
		UserBean bean = new UserBean("王维",21);
		ArrayList<UserBean> userBeanList = new ArrayList<>();
		userBeanList.add(bean);
		System.out.println(userBeanList.get(0));
	}
	
	@Test
	public void testSet(){
//		public E set(int index, E element)
//		返回的是旧的对象
	}
	
}
